/*
 * @Author: your name
 * @Date: 2021-03-23 10:12:06
 * @LastEditTime: 2021-04-08 15:57:18
 * @LastEditors: lily
 * @Description: In User Settings Edit
 * @FilePath: \js_leetcode\code\453.最小操作次数使数组元素相等.js
 */
/*
 * @lc app=leetcode.cn id=453 lang=javascript
 *
 * [453] 最小操作次数使数组元素相等
 */

// @lc code=start
/**
 * @param {number[]} nums
 * @return {number}
 */
//  思路：
//  将除了一个元素之外的全部元素+1，等价于将该元素-1，因为我们只对元素的相对大小感兴趣。因此，该问题简化为需要进行的减法次数。

//  复杂度：O(n)  O(1)

var minMoves = function (nums) {
    //找到数组中的最小值
    let min = Math.min(...nums)
    //每个元素与最小值的差值的总和就是结果（n-1个元素加1，相当于1个元素减1）
    let sum = 0
    for (let i = 0; i < nums.length; i++) {
        sum += nums[i] - min
    }
    return sum

};
// @lc code=end

console.log(minMoves([5, 6, 8, 8, 5]));